Introducción al análisis multivariado ------------------------------------- Con el análisis multivariado o multivariante de datos se busca: **1. Describir** **2. Resumir** **3. Agrupar** **4. Clasificar** **5. Relacionar** **Datos univariantes:** Una sola variable aleatoria con :math:`n` observaciones. **Datos multivariantes:** :math:`p > 1` variables aleatorias con :math:`n` observaciones. **Representación matricial de datos multivariantes:** Las variables se ubican en las columnas y las filas son las observaciones. El total de filas, :math:`n`, es el tamaño de la muestra, :math:`n` elementos muestrales. $ :raw-latex:`\left`( .. raw:: latex \begin{array}{ll} x_{11} & x_{12} & x_{13} & ... & x_{1p} \\ x_{21} & x_{22} & x_{23} & ... & x_{2p} \\ . & . & . & . & . \\ . & . & . & . & . \\ x_{n1} & x_{n2} & x_{n3} & ... & x_{np} \\ \end{array} :raw-latex:`\right`) $ **Representación vectorial de datos multivariantes:** La anterior matriz se puede representar de forma vectorial en función de las columnas así: .. math:: X = [X_1, X_2, X_3, ..., X_p] Donde :math:`X_j \in \mathbb R^n, \forall j = 1,2,3,...,p` Las :math:`p` variables aleatorias forman una variable aleatoria multivariante :math:`X`. **Tipos de variables:** **1. Cuantitativas:** datos numéricos. - **Continuas:** valores reales dentro de un intervalo. Ejemplo, precio de las acciones. - **Discretas:** valores numerables o contables. Ejemplo, estrato. **2. Cualitativas:** atributos o categorías. En el análisis exploratorio de datos multivariados se visualiza las variables cuantitativas y las variables cualitativas aportan información adicional como clasificar los datos por atributos o categorías. **Análisis exploratorio de datos multivariados:** - **Boxplot:** se realiza para una variable y tiene algunos estadísticos como mediana y cuartiles. Son útiles para analizar la localización de la variable, desviación, asimetría y datos atípicos. - **Histograma:** se realiza para una variable y es una representación gráfica de las frecuencias. Permiten identificar la distribución de la variable, asimetría, localización, dispersión y datos atípicos. - **Densidad Kernel:** es la función de densidad de la variable que se dibuja encima del histograma, la función se llama Kernel. Tiene el mismo análisis que los histogramas. Se puede hacer para una variable o dos variables separando los datos por grupos (variable categórica). La función más usada es la Gaussiana. - **Dispersión (scatterplot):** para análisis entre dos variables. Se usan visualizar la distribución bivariada, determinar la relación entre pares de variables. También se puede hacer en 3D con una tercera variable. - **Matriz de correlaciones:** es una tabla numérica donde muestra el coeficiente de correlación entre pares de variables. Se mide el grado de relación lineal entre un par de variables aleatorias. - **Radar:** para tres o más variables cuantitativas. Los ejes están ubicados radialmente. Tiene otros nombres como gráfico de araña (spider), de estrellas o polar. Permiten observar las diferencias entre las magnitudes de cada variable. **Medidas descriptivas:** Para analizar cada variable por separado se puede calcular las siguientes medidas estadísticas. - Media. - Varianza. - Desviación estándar. Para el análisis de la relación entre variables calculamos: - Covarianzas: matriz de varianzas-covarianzas. - Coeficientes de correlación: matriz de correlaciones. .. code:: r datos = read.csv("EAM_2019.csv", sep = ";", dec = ",", header = T) print(head(datos)) .. parsed-literal:: ï..ciiu personal_mujer personal_hombre gasto_personal gasto_financiero 1 1051 36 140 9352991 3240559 2 1030 40 176 7334998 1468298 3 3290 15 172 6668544 1547666 4 3091 88 373 22088759 35203208 5 3290 18 53 5219070 2861773 6 3290 18 53 5219070 2861773 costos_gastos_produccion gastos_adm_ventas inversion_AF ventas 1 6846304 22920307 4979745 192609248 2 5941761 12310286 5615593 115741258 3 6996020 2564695 773444 44580029 4 4175751 171278876 10501572 162509864 5 11037978 13691919 6423171 87324374 6 11037978 13691919 6423171 87324374 .. code:: r colnames(datos)[1] = "ciiu" names(datos) .. raw:: html
  1. 'ciiu'
  2. 'personal_mujer'
  3. 'personal_hombre'
  4. 'gasto_personal'
  5. 'gasto_financiero'
  6. 'costos_gastos_produccion'
  7. 'gastos_adm_ventas'
  8. 'inversion_AF'
  9. 'ventas'
.. code:: r datos[,1] = as.character(datos[,1]) str(datos) .. parsed-literal:: 'data.frame': 420 obs. of 9 variables: $ ciiu : chr "1051" "1030" "3290" "3091" ... $ personal_mujer : int 36 40 15 88 18 18 43 23 108 197 ... $ personal_hombre : int 140 176 172 373 53 53 215 97 149 70 ... $ gasto_personal : int 9352991 7334998 6668544 22088759 5219070 5219070 9386665 4756263 11081213 8575341 ... $ gasto_financiero : int 3240559 1468298 1547666 35203208 2861773 2861773 647945 630568 20390274 542136 ... $ costos_gastos_produccion: int 6846304 5941761 6996020 4175751 11037978 11037978 5445839 1622747 1843527 4002790 ... $ gastos_adm_ventas : num 2.29e+07 1.23e+07 2.56e+06 1.71e+08 1.37e+07 ... $ inversion_AF : int 4979745 5615593 773444 10501572 6423171 6423171 364272 265025 50853587 312822 ... $ ventas : num 1.93e+08 1.16e+08 4.46e+07 1.63e+08 8.73e+07 ... **Código en R:** .. code:: r library(ggplot2) Boxplot: ~~~~~~~~ Se crea el Boxplot para cada variable cuantitativa. La primera columna de los datos no es cuantitativa, es una variable cualitativa con los códigos CIIU de la DIAN. .. code:: r names(datos) .. raw:: html
  1. 'ciiu'
  2. 'personal_mujer'
  3. 'personal_hombre'
  4. 'gasto_personal'
  5. 'gasto_financiero'
  6. 'costos_gastos_produccion'
  7. 'gastos_adm_ventas'
  8. 'inversion_AF'
  9. 'ventas'
Las nueve variables se graficarán dentro de un ciclo ``for`` empezando en ``2`` porque la primera columna tiene la variable categórica de la DIAN. Para ingresar los nombres de las variables de forma automática se usa la función ``paste()``, con la cual podemos indicar una función y arrojará el resultado como una etiqueta. Con los Boxplot podemos identificar los datos atípicos por cada variable y asimetrías. .. code:: r for(i in 2:9){ print(ggplot(data = datos) + geom_boxplot(aes(x = datos[, i])) + coord_flip() + labs(title = "Encuesta nacional manufacturera", subtitle = paste(names(datos)[i]), x = "Frecuencia absoluta")) } .. image:: output_20_0.png :width: 420px :height: 420px .. image:: output_20_1.png :width: 420px :height: 420px .. image:: output_20_2.png :width: 420px :height: 420px .. image:: output_20_3.png :width: 420px :height: 420px .. image:: output_20_4.png :width: 420px :height: 420px .. image:: output_20_5.png :width: 420px :height: 420px .. image:: output_20_6.png :width: 420px :height: 420px .. image:: output_20_7.png :width: 420px :height: 420px Histograma con kernel: ~~~~~~~~~~~~~~~~~~~~~~ Función de densidad Kernel: .. math:: \hat{f_h} (x) = \frac{1}{nh} \sum {K \frac{x-x_i}{h}} Donde :math:`K` es la función Kernel. Para el Kernel Gaussiano :math:`K` es: .. math:: K(u) = \frac{1}{2 \pi}exp^{-\frac{u^2}{2}} :math:`h` es el ancho de banda. Entre más pequeño es :math:`h`, mayor es el sobre ajuste y la curve es menos suavizada. En ``ggplot2`` la densidad Kernel se hace con ``stat_density(kernel = "gaussian")``. Para cambiar :math:`h` se agrega el argumento ``adjust =``, por defecto es ``adjust = 1``. Las asimetrías se observan más fácilmente en los histogramas. También, podemos identificar si los datos atípicos tienen alta o baja frecuencia. .. code:: r for(i in 2:9){ print(ggplot(data = datos) + aes(x = datos[, i]) + geom_histogram(aes(y = ..density..), bins = 30, fill = "#F0FFFF", color = "black") + stat_density(kernel = "gaussian", fill = "#707070", alpha = 0.5) + theme_minimal() + labs(title = "Encuesta nacional manufacturera", subtitle = paste(names(datos)[i]), y = "Frecuencia absoluta", x = paste(names(datos)[i]))) } .. image:: output_24_0.png :width: 420px :height: 420px .. image:: output_24_1.png :width: 420px :height: 420px .. image:: output_24_2.png :width: 420px :height: 420px .. image:: output_24_3.png :width: 420px :height: 420px .. image:: output_24_4.png :width: 420px :height: 420px .. image:: output_24_5.png :width: 420px :height: 420px .. image:: output_24_6.png :width: 420px :height: 420px .. image:: output_24_7.png :width: 420px :height: 420px Matríz de dispersión: ~~~~~~~~~~~~~~~~~~~~~ La base de ``R`` tiene la función ``pairs()`` para construir matrices de dispersión. Recuerde que las variables cuantitativas están desde la columna 2 hasta la 9. .. code:: r pairs(datos[, 2:9]) .. image:: output_27_0.png :width: 420px :height: 420px El paquete ``GGally`` es una extensión de ``ggplot2`` y se usa para crear la matríz de dispersión con la función ``ggpairs()``. ``GGally`` funciona en versiones superiores de 3.1 en ``R`` y versiones superiores de 3.3.4 en ``ggplot2``. ``packageVersion("ggplot2")`` ``R.version`` Después, instalar el paquete así: ``install.packages("GGally")`` .. code:: r library(GGally) .. parsed-literal:: Registered S3 method overwritten by 'GGally': method from +.gg ggplot2 .. code:: r ggpairs(datos[,2:9]) .. image:: output_30_0.png :width: 420px :height: 420px Matríz de correlaciones: ~~~~~~~~~~~~~~~~~~~~~~~~ La base de ``R`` tiene la función ``cor()`` para construir la matríz de correlación .. code:: r cor(datos[,2:9]) .. raw:: html
A matrix: 8 × 8 of type dbl
personal_mujerpersonal_hombregasto_personalgasto_financierocostos_gastos_producciongastos_adm_ventasinversion_AFventas
personal_mujer1.000000000.459182610.51147330.059513920.18152750.06255630.046075810.05007149
personal_hombre0.459182611.000000000.84958290.072679650.35346150.25583840.099315220.32545296
gasto_personal0.511473270.849582911.00000000.163540490.60567470.47557110.125041790.53904261
gasto_financiero0.059513920.072679650.16354051.000000000.17536520.10629690.083735040.08489441
costos_gastos_produccion0.181527470.353461470.60567470.175365171.00000000.72374230.189386340.76599555
gastos_adm_ventas0.062556300.255838360.47557110.106296910.72374231.00000000.132186550.97091339
inversion_AF0.046075810.099315220.12504180.083735040.18938630.13218651.000000000.14171846
ventas0.050071490.325452960.53904260.084894410.76599550.97091340.141718461.00000000
Con el paquete ``GGally`` se puede crear una matríz de correlaciones aplicando la función ``ggcorr()`` .. code:: r ggcorr(datos[,2:9]) .. image:: output_35_0.png :width: 420px :height: 420px Usted puede buscar muchas formas para representar la matríz de correlaciones. Veamos el siguiente ejemplo: Función ``corrplot()`` de la librería con el mismo nombre. ``install.packages("corrplot")`` .. code:: r library("corrplot") .. parsed-literal:: corrplot 0.92 loaded Primero se crea la matríz de correlaciones con la función de la base de R llamada ``cor()``. .. code:: r correlaciones <- cor(datos[,2:9]) corrplot(correlaciones, method="circle") corrplot(correlaciones, method="pie") corrplot(correlaciones, method="color") corrplot(correlaciones, method="number") .. image:: output_39_0.png :width: 420px :height: 420px .. image:: output_39_1.png :width: 420px :height: 420px .. image:: output_39_2.png :width: 420px :height: 420px .. image:: output_39_3.png :width: 420px :height: 420px